package persistence;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.LinkedHashMap;

import bean.Compositor;
import bean.FaixaCD;
import bean.PeriodoMusical;
import conexao.Conexao;

public class Consulta {

	public LinkedHashMap<String, FaixaCD> buscarResultado(String descricao) {

		LinkedHashMap<String, FaixaCD> faixas = new LinkedHashMap<String, FaixaCD>();
		String sql = " select faixa.codigo_faixa as codigo, faixa.descricao as descricao, compositor.nome as compositor, periodomusical.descricao as periodo"
				+ " from cd inner join faixa on cd.codigo_cd = faixa.codigo_cd inner join faixaporcompositor as a on faixa.codigo_faixa = a.codigo_faixa and faixa.codigo_cd = a.codigo_cd inner join"
				+ " compositor on a.codigo_compositor = compositor.codigo_compositor inner join periodomusical on compositor.codigo_periodomusical = periodomusical.codigo_periodomusical"
				+ " where cd.descricao like '%"
				+ descricao
				+ "%' order by faixa.codigo_cd";

		Connection conn = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		conn = Conexao.getConn();

		try {
			stmt = conn.prepareStatement(sql);
			rs = stmt.executeQuery();
			String checkCompositor = "";
			ArrayList<Compositor> compositores = new ArrayList<Compositor>();
			while (rs.next()) {
				if (!checkCompositor.equals(rs.getString("codigo"))) {
					Compositor compositor = new Compositor();
					PeriodoMusical periodo = new PeriodoMusical();
					FaixaCD resultado = new FaixaCD();
					resultado.setId(rs.getString("codigo"));
					resultado.setDescricao(rs.getString("descricao"));
					compositor.setNome(rs.getString("compositor"));
					periodo.setDescricao(rs.getString("periodo"));
					compositor.setPeriodo(periodo);
					if (compositor != null) {
						compositores.add(compositor);
						resultado.setCompositores(compositores);
					}
					faixas.put(resultado.getId(), resultado);
					checkCompositor = rs.getString("codigo");
					
				} else {
					Compositor comp = new Compositor();
					PeriodoMusical peri = new PeriodoMusical();
					peri.setDescricao(rs.getString("periodo"));
					comp.setNome(rs.getString("compositor"));
					comp.setPeriodo(peri);
					faixas.get(checkCompositor).getCompositores()
							.add(comp);
				}
			}
			
			stmt.close();
			rs.close();

		} catch (SQLException e) {
			e.printStackTrace();
		}

		return faixas;

	}
}
